/*
 * Copyright (c) 2022, Chongqing UCchip InfoTech Co.,Ltd
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * @brief HTTP OTA downloader
 *
 * Change Logs:
 * Date           Author       Notes
 * 2024-01-17     jlu          the first version
 */

#ifndef _NET_DOWN_H_
#define _NET_DOWN_H_

// HTTP 下载线程参数
#define DOWN_THREAD_STACK_SIZE         3072
#define DOWN_THREAD_PRIORITY           11
#define DOWN_THREAD_TICK               3

// HTTP 下载参数
#define DOWN_RETRY                     3
#define DOWN_DELAY                     2000
#define DOWN_BLOCK_SIZE                2048

#ifdef __cplushplus
extern "C"
{
#endif

/**
 * @brief  下载信息
 *
 */
typedef struct down_info
{
    char     *url;                     /**< 链接地址 */
    char     *name;                    /**< 文件名 */
    char      md5[33];                 /**< 文件 MD5 值 */
    int       recv_len;                /**< 接收长度 */
    int       state;                   /**< 状态: 0. free, 1. busy */
    int       file_size;               /**< 文件大小 */
    int       fd;                      /**< 文件句柄 */
    int       cur_rate;                /**< 当前下载进度*/
    int       last_rate;               /**< 上次下载进度*/
} down_info_t;

/**
 * @brief  http 下载
 *
 * @param  uri 资源标识符
 * @param  name 文件名
 * @param  md5 文件MD5值
 * @return 成功返回0，否则返回非0
 *         1. 非法参数
 *         2. 正在下载中
 *         3. 创建线程失败
 */
int http_download(const char* uri, const char* name, const char* md5);

void *get_down_partition(void);

#ifdef __cplushplus
}
#endif // __cplushplus

#endif // _NET_DOWN_H_
